package estates.model;

import java.util.HashMap;
import java.util.List;
import javax.persistence.*;


public class DekoratorLokalowy extends Dekorator {

  private int typ_lokalu;
  private int liczba_lazieniek;
  private int pietro;
  private boolean czy_rozkladowy;
  private int numer_lokalu;

  public DekoratorLokalowy() {
  }

    @Override
    public boolean update(HashMap<String,Object> hm) {
        return element.update(hm);
    }
      @Override
    public List<User> getInterestedUsers() {
        return element.getInterestedUsers();
    }

    @Override
    public boolean setInterestedUser(User u) {
        element.setInterestedUser(u);
        return true;
    }


  public DekoratorLokalowy(Estate e) {
    super(e);
  }

  public int getTypLokalu() {
    return typ_lokalu;
  }

  public int getLiczbaLazieniek() {
    return liczba_lazieniek;
  }

  public int getPietro() {
    return pietro;
  }

  public boolean getCzyRozkladowy() {
    return czy_rozkladowy;
  }

  public int getNumerLokalu() {
    return numer_lokalu;
  }

  @Override
  public void dekoruj(HashMap<String, Object> hm) {
    if (hm.containsKey("typ_lokalu")) {
      this.typ_lokalu = (Integer) hm.get("typ_lokalu");
    }
    if (hm.containsKey("liczba_lazieniek")) {
      this.liczba_lazieniek = (Integer) hm.get("liczba_lazieniek");
    }
    if (hm.containsKey("pietro")) {
      this.pietro = (Integer) hm.get("pietro");
    }
    if (hm.containsKey("czy_rozkladowy")) {
      this.czy_rozkladowy = (Boolean) hm.get("czy_rozkladowy");
    }
    if (hm.containsKey("numer_lokalu")) {
      this.numer_lokalu = (Integer) hm.get("numer_lokalu");
    }

    this.element.dekoruj(hm);
  }

  @Override
  public boolean equals(Object e) {
    if (!(e instanceof DekoratorLokalowy)) {
      return false;
    }
    return element.equals(e);
  }

  @Override
  public int hashCode() {
    int hash = 7;
   hash = 71 * hash + this.element.hashCode();
/*    hash = 71 * hash + this.typ_lokalu;
    hash = 71 * hash + this.liczba_lazieniek;
    hash = 71 * hash + this.pietro;
    hash = 71 * hash + (this.czy_rozkladowy ? 1 : 0);
    hash = 71 * hash + this.numer_lokalu;*/
    return hash;
  }

  @Override
  public String toString() {
    String pom = element.toString();
    pom += "&typ_lokalu=" + typ_lokalu +
            "&liczba_lazieniek=" + liczba_lazieniek +
            "&pietro=" + pietro +
            "&czy_rozkladowy=" + czy_rozkladowy +
            "&numer_lokalu=" + numer_lokalu;
    return pom;
  }

  @Override
  public int rPlaceByCzyRozkladowy(int ilosc_kubkow) {
    int ret;
    if (czy_rozkladowy == true) {
      ret = 0;
    } else {
      ret = 1;
    }
    return ret;
  }
  
  @Override
  public int rPlaceByliczbaPokoi(int ilosc_kubkow) {
    int ret = 0;
    if (liczba_lazieniek >= 0 && liczba_lazieniek < 60) {
      ret = ilosc_kubkow - 1 - liczba_lazieniek % ilosc_kubkow;
    } else if (liczba_lazieniek >= 60) {
      ret = 0;
    } else {
      ret = ilosc_kubkow - 1;
    }
    return liczba_lazieniek;
  }

  @Override
  public HashMap<String, String> obliczSrednieOceny() {
	  return element.obliczSrednieOceny();
  }

    /*@Override
    public List<User> getInterestedUsers() {
        return element.getInterestedUsers();
    }

    @Override
    public boolean setInterestedUser(User u) {
        element.setInterestedUser(u);
        return true;
    }*/
}
